package design_pattern.ThreadLocal.Execution;

/**
 * @Author: 蔡翔
 * @Date: 2019/11/11 16:00
 * @Version 1.0
 */
public class ActionContext {
    //ThreadLocal<> 是线程安全的，因为线程之间压根就是隔离的。
    //如果在用线程池的情况下，一个线程创建使用完后销毁了，那个这个线程与之对应的 在threadLocal的 value还是存在的。
    private static final ThreadLocal<Context> threadLocal = new ThreadLocal<Context>(){
        @Override
        protected Context initialValue() {
            //这里return 的就是  某个线程对应的它的保险箱里面的数据。
            return new Context();
        }
    };

    //用这个Holder 就是为了 new 一个ActionContext(); 【  在静态方法的情况下  】
    private static class ContextHolder{
        private final static ActionContext actionContext = new ActionContext();
    }

    public static ActionContext getActionContext(){
        return ContextHolder.actionContext;
    }

    //从ThreadLocal里面获取 数
    public Context getContext(){
        return threadLocal.get();
    }
}
